import adminList from "$v/adminList.ejs"


//引入添加api请求模块
import {
    addAdminRequest,
    adminListRequest,
    deleteAdminRequest,
    isLoginRequest
} from "$a/admin"

// 封装一个展示所有管理员的功能函数，初始化、添加、删除的时候都执行
const showAdminList = async (res) => {
    let adminListResult = null
    // 只要进入当前路由函数，则立马开始查询所有管理员信息
    try {
        adminListResult = await adminListRequest();
    } catch (e) {
        alert("获取管理员列表异常：" + e.message) 

        // 判断是否为权限异常
        if (!e.isLogin) {
            return router.go("/login")
        }
    }

    // 渲染二级路由视图
    res.render(adminList({
        adminList: adminListResult,
    }))
}

export default async (req, res) => {

    try {
        await isLoginRequest()
    } catch (e) {
        alert("有异常" + e.message)

        // 判断是否权限异常
        if (!e.isLogin) {
            return router.go("/login")
        }
    }

    // 初始化页面展示所有管理员
    await showAdminList(res)

    // 给保存按钮添加点击事件
    const oSaveAdminBtn = document.getElementById("saveAdminBtn")
    // console.log(saveAdminBtn);
    // 事件委托，因为将来部分视图会重新渲染，如果给重新渲染的元素绑定事件，时间在重新渲染之后可能就失效了
    document.onclick = async function (e) {
        if (e.target.id === "saveAdminBtn") {
            // 获取三个文本输入框的节点
            const oAdminName = document.getElementById("adminName")
            const oPassWord = document.getElementById("passWord")
            const oRePpassWord = document.getElementById("rePpassWord")
            // 获取三个注册文本输入框的内容
            const adminNameValue = oAdminName.value.trim()
            const passWordValue = oPassWord.value.trim()
            const rePpassWordValue = oRePpassWord.value.trim()

            // 判断输入框的三个内容是否有空的
            if (!adminNameValue || !passWordValue || !rePpassWordValue) {
                return alert("输入的内容不能为空！")
            }
            //判断两次输入的密码是否一致
            if (passWordValue !== rePpassWordValue) {
                return alert("两次输入的密码不一致！")
            }
            try {
                // 调用api中的管理员请求，参数是管理员信息的对象
                await addAdminRequest({
                    adminName: adminNameValue,
                    password: passWordValue,
                    regTime: new Date().toLocaleString()
                })
                alert("添加成功")
                //添加成功之后,管理添加窗口(手动触发某个元素上的点击事件)
                document.getElementById("clossAdd").click()
                //清空表单
                document.adminForm.reset();

                // 添加成功，重新发送请求展示所有管理员
                showAdminList(res)
            } catch (e) {
                alert("有错误," + e.message)
                //清空表单
                document.adminForm.reset();
            }
        }

        //添加删除管理员逻辑
        if (e.target.nodeName === "BUTTON" && e.target.parentNode.nodeName === "TD") {
            // 获取当前删除按钮对应的adminName
            const adminName = e.target.dataset.adminname;
            // const adminName = e.target.getAttribute("adminname");
            // console.log(adminName);
            try {
                await deleteAdminRequest(adminName)
                alert("删除管理员" + adminName + "成功")
                // 删除管理员后重新展示所有管理员
                showAdminList(res)
            } catch (e) {
                alert("删除管理员" + adminName + "异常")
                // 判断是否为权限异常
                if (!e.isLogin) {
                    return router.go("/login")
                }
            }
        }
    }
}